package com.mitcub.panda.controller;

import com.mitcub.panda.utils.RespResult;
import com.mitcub.panda.utils.SmsComponent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

/**
 * @项目名称: PandaAdmin
 * @类名称: SmsController
 * @类描述: 短信发送相关
 * @作者: tangloong
 * @创建时间: 2021/11/16 16:35
 */

@Controller
public class SmsController {
    @Autowired
    SmsComponent smsComponent;

    /**
     * 发送短信验证码
     * 为防止有人恶意刷短信，这里我们添加了一个60秒内防刷的功能
     * @param phone 手机号
     * @return
     */
    @GetMapping("/sms/sendCode")
    @ResponseBody
    public RespResult sendCodeForSms(@RequestParam("phone") String phone) {
        // TODO 1、接口防刷
        // 先从redis中拿取
        String redisCode ="";// redisTemplate.opsForValue().get("sms:code:"+ phone);
        if(!StringUtils.isEmpty(redisCode)) {
            // 拆分
            long l = Long.parseLong(redisCode.split("_")[1]);
            // 当前系统事件减去之前验证码存入的事件 小于60000毫秒=60秒
            if (System.currentTimeMillis() -l < 60000) {
                // 60秒内不能再发
                RespResult.error("发送频繁");
            }
        }
        // 2、验证码的再次效验
        // 数据存入 =》redis key-phone value - code sms:code:131xxxxx - >45678
        String code = UUID.randomUUID().toString().substring(0,5).toUpperCase();
        // 拼接验证码
        String substring = code+"_" + System.currentTimeMillis();
        // redis缓存验证码 防止同一个phone在60秒内发出多次验证吗
        //redisTemplate.opsForValue().set("sms:code:"+ phone,substring,10, TimeUnit.MINUTES);

        // 调用第三方服务模块发送验证码
        //smsComponent.sendSmsCode(phone,code);
        return RespResult.success();
    }

    @ResponseBody
    @GetMapping("/email/sendcode")
    public RespResult sendCodeForEmail(@RequestParam("email") String email){
        String s = "";//redisTemplate.opsForValue().get("mail:code:" + email);
        if(!StringUtils.isEmpty(s)){
            Long l = Long.parseLong(s.split("_")[1]);
            if(System.currentTimeMillis() - l < 60000){
                return RespResult.error("发送频繁");
            }
        }
        String code = UUID.randomUUID().toString().substring(0,5)+"_"+System.currentTimeMillis();
        //redisTemplate.opsForValue().set("mail:code:" + email,code,5,TimeUnit.MINUTES);
        //thirdPartFeignService.sendCodeForEmail(email,code.split("_")[0]);
        return RespResult.success();
    }



}
